/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 2002-2006
* Sleepycat Software. All rights reserved.
*
* $Id: CheckpointMonitor.java,v 1.1 2006/05/06 08:59:54 ckaestne Exp $
*/
package com.sleepycat.je.log;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.config.EnvironmentParams;
import com.sleepycat.je.dbi.EnvironmentImpl;
/**
* The checkpoint monitor saves information about log writes to decide when a
* checkpoint is needed.
*/
class CheckpointMonitor {
private int bytesWritten;
private long periodInBytes;
private EnvironmentImpl envImpl;
CheckpointMonitor(EnvironmentImpl envImpl)
throws DatabaseException {
bytesWritten = 0;
periodInBytes = envImpl.getConfigManager().getLong
(EnvironmentParams.CHECKPOINTER_BYTES_INTERVAL);
/*
* The period is reset each activation and is not synchronized with the
* interval counted by the Checkpointer. Use a small enough period to
* invoke the Checkpointer within 10% of its interval.
*/
periodInBytes /= 10;
this.envImpl = envImpl;
}
/**
* Update checkpoint driving information. Call from within the log write
* latch.
*
* @return true if a checkpoint is needed.
*/
boolean recordLogWrite(int entrySize, LoggableObject item) {
bytesWritten += entrySize;
return (bytesWritten >= periodInBytes);
}
/**
* Wake up the checkpointer. Note that the check on bytesWritten is
* actually within a latched period.
*/
void activate() {
envImpl.getCheckpointer().wakeup();
bytesWritten = 0;
}
}